home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / misc / TownMaze.lha / TownMaze / src.lzh / closedoors.c < prev    next >
C/C++ Source or Header  |  1991-08-04  |  2KB  |  79 lines

  1. /*
  2. ** closedoors.c  Copyright 1991 Kent Paul Dolan,
  3. **               Mountain View, CA, USA 94039-0755
  4. **
  5. ** Written to satisfy an inquiry on USENet's rec.games.programmer newsgroup.
  6. ** May be freely used or modified in any non-commercial work.  Copyrighted
  7. ** only to prevent patenting by someone else.
  8. */
  9.  
  10. #include <stdio.h>
  11. #include "townmaze.h"
  12. #include "townproto.h"
  13.  
  14. #ifdef __STDC__
  15. void closedoors()
  16. #else
  17. int closedoors()
  18. #endif
  19. {
  20.  
  21. /*
  22. ** The map as built so far has far too many doors per room.  Close all
  23. ** but one door of each room to make a "Bard's Tale I"-like maze.
  24. */
  25.  
  26.   int deadwalk;  /* nothing interesting left but the dead cells */
  27.   int doorct, whichdoor;
  28.   int celli, cellj;
  29.  
  30. #if PROGRESS
  31.   fprintf(stderr,"Close Doors ");
  32. #endif
  33.  
  34.   deadwalk = dead;
  35.  
  36.   while (deadwalk != NOPOINTER)
  37.   {
  38.  
  39.     celli = deadwalk/(mazewidth/2);
  40.     cellj = deadwalk%(mazewidth/2);
  41.  
  42.     celli = (2*celli) + 1;
  43.     cellj = (2*cellj) + 1;
  44.  
  45.     doorct = 0;
  46.     if (cmaze[celli - 1][cellj] == HDOOR) doorct++;
  47.     if (cmaze[celli][cellj + 1] == VDOOR) doorct++;
  48.     if (cmaze[celli + 1][cellj] == HDOOR) doorct++;
  49.     if (cmaze[celli][cellj - 1] == VDOOR) doorct++;
  50.  
  51.     if ( doorct > 1 )
  52.     {
  53.       whichdoor = RANDOM()%doorct; /* keep this one */
  54.       doorct = 0;
  55.       if (cmaze[celli - 1][cellj] == HDOOR)
  56.       {
  57.         if (doorct != whichdoor) cmaze[celli - 1][cellj] = WALL;
  58.         doorct++;
  59.       }
  60.       if (cmaze[celli][cellj + 1] == VDOOR)
  61.       {
  62.         if (doorct != whichdoor) cmaze[celli][cellj + 1] = WALL;
  63.         doorct++;
  64.       }
  65.       if (cmaze[celli + 1][cellj] == HDOOR)
  66.       {
  67.         if (doorct != whichdoor) cmaze[celli + 1][cellj] = WALL;
  68.         doorct++;
  69.       }
  70.       if (cmaze[celli][cellj - 1] == VDOOR)
  71.       {
  72.         if (doorct != whichdoor) cmaze[celli][cellj - 1] = WALL;
  73.         doorct++;
  74.       }
  75.     }
  76.     deadwalk = statlist[deadwalk].next;
  77.   }
  78. }
  79.